在前面几章中,我们讨论了依赖注入(DI)的各个方面,以及如何在 Nest 中使用它。其中一个例子是基于构造函数的依赖注入,用于将实例(通常是服务提供者)注入到类中。当您了解到依赖注入是以一种基本的方式构建到 Nest 内核中时,您不会感到惊讶。到目前为止,我们只探索了一个主要模式。随着应用程序变得越来越复杂,您可能需要利用 DI 系统的所有特性,因此让我们更详细地研究它们。
依赖注入依赖注入是一种控制反转(IoC)技术,您可以将依赖的实例化委派给 IoC 容器(在我们的示例中为 NestJS 运行时系统),而不是必须在自己的代码中执行。 让我们从“提供者”一章中检查此示例中发生的情况。
首先,我们定义一个提供者。@Injectable()装饰器将 CatsService 类标记为提供者。
cats.service.ts
import { Injectable } from '@nestjs/common';import { Cat } from './interfaces/cat.interface';@Injectable()export class CatsService { private readonly cats: Cat[] = []; findAll(): Cat[] {return this.cats; }}然后,我们要求 Nest 将提供程序注入到我们的控制器类中:
cats.controller.ts
import { Controller, Get } from '@nestjs/common';import { CatsService } from './cats.service';import { Cat } from './interfaces/cat.interface';@Controller('cats')export class CatsController { constructor(private readonly catsService: CatsService) {} @Get() async findAll(): Promise {return this.catsService.findAll(); }}最后,我们在 Nest IoC 容器中注册提供程序
app.module.ts
import { Module } from '@nestjs/common';import { CatsController } from './cats/cats.controller';import { CatsService } from './cats/cats.service';@Module({ controllers: [CatsController], providers: [CatsService],})export class AppModule {}这个过程有三个关键步骤:
在 cats.service.ts 中 @Injectable() 装饰器